+2006-01-04 Matthias Clasen <mclasen@redhat.com>
+
+ * gtk/gtkaccelmap.c:
+ * gtk/gtkactiongroup.c:
+ * gtk/gtkdialog.c:
+ * gtk/gtkfilesystemunix.c:
+ * gtk/gtkgc.c:
+ * gtk/gtkkeyhash.c:
+ * gtk/gtkplug.c:
+ * gtk/gtktextiter.c:
+ * gtk/gtktextlayout.c:
+ * gtk/gtkuimanager.c:
+ * gtk/gtkwidget.c:
+ * gtk/gtkwindow.c:
+ * gtk/gtkxembed.c: Use the slice allocator for many small
+ allocations.
+
+ * gtk/gtkcolorsel.c:
+ * gtk/gtktreeview.c: Use IPN.
+
+ * gtk/gtkwidget.c: Remove an unused field from the AccelPath
+ struct.
+
2006-01-04 Tor Lillqvist <tml@novell.com>
* gtk-zip.sh.in: Include also the gtk20-properties message catalogs.
+2006-01-04 Matthias Clasen <mclasen@redhat.com>
+
+ * gtk/gtkaccelmap.c:
+ * gtk/gtkactiongroup.c:
+ * gtk/gtkdialog.c:
+ * gtk/gtkfilesystemunix.c:
+ * gtk/gtkgc.c:
+ * gtk/gtkkeyhash.c:
+ * gtk/gtkplug.c:
+ * gtk/gtktextiter.c:
+ * gtk/gtktextlayout.c:
+ * gtk/gtkuimanager.c:
+ * gtk/gtkwidget.c:
+ * gtk/gtkwindow.c:
+ * gtk/gtkxembed.c: Use the slice allocator for many small
+ allocations.
+
+ * gtk/gtkcolorsel.c:
+ * gtk/gtktreeview.c: Use IPN.
+
+ * gtk/gtkwidget.c: Remove an unused field from the AccelPath
+ struct.
+
2006-01-04 Tor Lillqvist <tml@novell.com>
* gtk-zip.sh.in: Include also the gtk20-properties message catalogs.
guint accel_mods;
guint std_accel_key;
guint std_accel_mods;
- guint changed : 1;
- guint lock_count;
+ guint changed : 1;
+ guint lock_count : 15;
GSList *groups;
} AccelEntry;
}
else
{
- entry = g_new0 (AccelEntry, 1);
- entry->accel_path = g_quark_to_string (g_quark_from_string (accel_path));
+ entry = g_slice_new0 (AccelEntry);
+ entry->accel_path = g_intern_string (accel_path);
entry->std_accel_key = accel_key;
entry->std_accel_mods = accel_mods;
entry->accel_key = accel_key;
if (shared_data->destroy)
(*shared_data->destroy) (shared_data->data);
- g_free (shared_data);
+ g_slice_free (SharedData, shared_data);
}
}
g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
- shared_data = g_new0 (SharedData, 1);
+ shared_data = g_slice_new0 (SharedData);
shared_data->ref_count = 1;
shared_data->data = user_data;
shared_data->destroy = destroy;
g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
- shared_data = g_new0 (SharedData, 1);
+ shared_data = g_slice_new0 (SharedData);
shared_data->ref_count = 1;
shared_data->data = user_data;
shared_data->destroy = destroy;
guint changing : 1;
guint default_set : 1;
guint default_alpha_set : 1;
+ guint has_grab : 1;
gdouble color[COLORSEL_NUM_CHANNELS];
gdouble old_color[COLORSEL_NUM_CHANNELS];
/* Window for grabbing on */
GtkWidget *dropper_grab_widget;
guint32 grab_time;
- gboolean has_grab;
/* Connection to settings */
gulong settings_connection;
P_("Palette to use in the color selector"),
default_colors,
GTK_PARAM_READWRITE));
+
+ g_type_class_add_private (gobject_class, sizeof (ColorSelectionPrivate));
}
/* widget functions */
gtk_widget_push_composite_child ();
- priv = colorsel->private_data = g_new0 (ColorSelectionPrivate, 1);
+ priv = colorsel->private_data = G_TYPE_INSTANCE_GET_PRIVATE (colorsel, GTK_TYPE_COLOR_SELECTION, ColorSelectionPrivate);
priv->changing = FALSE;
priv->default_set = FALSE;
priv->default_alpha_set = FALSE;
static void
gtk_color_selection_finalize (GObject *object)
{
- GtkColorSelection *cselection = GTK_COLOR_SELECTION (object);
-
- if (cselection->private_data)
- {
- g_free (cselection->private_data);
- cselection->private_data = NULL;
- }
-
G_OBJECT_CLASS (parent_class)->finalize (object);
}
return GTK_WIDGET (dialog);
}
+static void
+response_data_free (gpointer data)
+{
+ g_slice_free (ResponseData, data);
+}
+
static ResponseData*
get_response_data (GtkWidget *widget,
gboolean create)
if (ad == NULL && create)
{
- ad = g_new (ResponseData, 1);
+ ad = g_slice_new (ResponseData);
g_object_set_data_full (G_OBJECT (widget),
I_("gtk-dialog-response-data"),
ad,
- g_free);
+ response_data_free);
}
return ad;
{
if (element->pixbuf)
g_object_unref (element->pixbuf);
- g_free (element);
+ g_slice_free (IconCacheElement, element);
}
static void
element = g_hash_table_lookup (cache, name);
if (!element)
{
- element = g_new0 (IconCacheElement, 1);
+ element = g_slice_new0 (IconCacheElement);
g_hash_table_insert (cache, g_strdup (name), element);
}
static gint initialize = TRUE;
static GCache *gc_cache = NULL;
-
+static GQuark quark_gtk_gc_drawable_ht = 0;
GdkGC*
gtk_gc_get (gint depth,
{
GtkGCDrawable *drawable = data;
g_object_unref (drawable->drawable);
- g_free (drawable);
+ g_slice_free (GtkGCDrawable, drawable);
}
static GHashTable*
gtk_gc_get_drawable_ht (GdkScreen *screen)
{
- GHashTable *ht = g_object_get_data (G_OBJECT (screen), "gtk-gc-drawable-ht");
+ GHashTable *ht = g_object_get_qdata (G_OBJECT (screen), quark_gtk_gc_drawable_ht);
if (!ht)
{
ht = g_hash_table_new_full ((GHashFunc) gtk_gc_drawable_hash,
(GEqualFunc) gtk_gc_drawable_equal,
NULL, free_gc_drawable);
- g_object_set_data_full (G_OBJECT (screen),
- I_("gtk-gc-drawable-ht"), ht,
- (GDestroyNotify)g_hash_table_destroy);
+ g_object_set_qdata_full (G_OBJECT (screen),
+ quark_gtk_gc_drawable_ht, ht,
+ (GDestroyNotify)g_hash_table_destroy);
}
return ht;
{
initialize = FALSE;
+ quark_gtk_gc_drawable_ht = g_quark_from_static_string ("gtk-gc-drawable-ht");
+
gc_cache = g_cache_new ((GCacheNewFunc) gtk_gc_new,
(GCacheDestroyFunc) gtk_gc_destroy,
(GCacheDupFunc) gtk_gc_key_dup,
drawable = g_hash_table_lookup (ht, &keyval->depth);
if (!drawable)
{
- drawable = g_new (GtkGCDrawable, 1);
+ drawable = g_slice_new (GtkGCDrawable);
drawable->depth = keyval->depth;
drawable->drawable = gdk_pixmap_new (gdk_screen_get_root_window (screen),
1, 1, drawable->depth);
(*key_hash->destroy_notify) (entry->value);
g_free (entry->keys);
- g_free (entry);
+ g_slice_free (GtkKeyHashEntry, entry);
}
static void
GdkModifierType modifiers,
gpointer value)
{
- GtkKeyHashEntry *entry = g_new (GtkKeyHashEntry, 1);
+ GtkKeyHashEntry *entry = g_slice_new (GtkKeyHashEntry);
entry->value = value;
entry->keyval = keyval;
gpointer data)
{
GHashTable *new_grabbed_keys = data;
- GrabbedKey *key = g_new (GrabbedKey, 1);
+ GrabbedKey *key = g_slice_new (GrabbedKey);
key->accelerator_key = keyval;
key->accelerator_mods = modifiers;
g_hash_table_replace (new_grabbed_keys, key, key);
}
+static void
+grabbed_key_free (gpointer data)
+{
+ g_slice_free (GrabbedKey, data);
+}
+
static void
gtk_plug_keys_changed (GtkWindow *window)
{
GHashTable *new_grabbed_keys, *old_grabbed_keys;
GtkPlug *plug = GTK_PLUG (window);
- new_grabbed_keys = g_hash_table_new_full (grabbed_key_hash, grabbed_key_equal, (GDestroyNotify)g_free, NULL);
+ new_grabbed_keys = g_hash_table_new_full (grabbed_key_hash, grabbed_key_equal, (GDestroyNotify)grabbed_key_free, NULL);
_gtk_window_keys_foreach (window, keys_foreach, new_grabbed_keys);
if (plug->socket_window)
g_return_val_if_fail (iter != NULL, NULL);
- new_iter = g_new (GtkTextIter, 1);
+ new_iter = g_slice_new (GtkTextIter);
*new_iter = *iter;
{
g_return_if_fail (iter != NULL);
- g_free (iter);
+ g_slice_free (GtkTextIter, iter);
}
GType
if (appearance->fg_stipple)
g_object_unref (appearance->fg_stipple);
- g_free (attr);
+ g_slice_free (GtkTextAttrAppearance, attr);
}
static gboolean
klass.type = gtk_text_attr_appearance_type =
pango_attr_type_register ("GtkTextAttrAppearance");
- result = g_new (GtkTextAttrAppearance, 1);
+ result = g_slice_new (GtkTextAttrAppearance);
result->attr.klass = &klass;
result->appearance = *appearance;
GtkTreeSortableIface *iface;
g_return_if_fail (GTK_IS_TREE_SORTABLE (sortable));
+ g_return_if_fail (sort_func != NULL);
iface = GTK_TREE_SORTABLE_GET_IFACE (sortable);
gtk_binding_entry_add_signal (binding_set, GDK_f, GDK_CONTROL_MASK, "start_interactive_search", 0);
gtk_binding_entry_add_signal (binding_set, GDK_F, GDK_CONTROL_MASK, "start_interactive_search", 0);
+
+ g_type_class_add_private (o_class, sizeof (GtkTreeViewPrivate));
}
static void
gtk_tree_view_init (GtkTreeView *tree_view)
{
- tree_view->priv = g_new0 (GtkTreeViewPrivate, 1);
+ tree_view->priv = G_TYPE_INSTANCE_GET_PRIVATE (tree_view, GTK_TYPE_TREE_VIEW, GtkTreeViewPrivate);
+
GTK_WIDGET_SET_FLAGS (tree_view, GTK_CAN_FOCUS);
gtk_widget_set_redraw_on_allocate (GTK_WIDGET (tree_view), FALSE);
static void
gtk_tree_view_finalize (GObject *object)
{
- GtkTreeView *tree_view = (GtkTreeView *) object;
-
- g_free (tree_view->priv);
-
(* G_OBJECT_CLASS (parent_class)->finalize) (object);
}
return node;
}
+static void
+node_ui_reference_free (gpointer data)
+{
+ g_slice_free (NodeUIReference, data);
+}
+
static gboolean
free_node (GNode *node)
{
Node *info = NODE_INFO (node);
- g_list_foreach (info->uifiles, (GFunc) g_free, NULL);
+ g_list_foreach (info->uifiles, (GFunc) node_ui_reference_free, NULL);
g_list_free (info->uifiles);
if (info->action)
reference = node->uifiles->data;
else
{
- reference = g_new (NodeUIReference, 1);
+ reference = g_slice_new (NodeUIReference);
node->uifiles = g_list_prepend (node->uifiles, reference);
}
if (p == node->uifiles)
mark_node_dirty (gnode);
node->uifiles = g_list_delete_link (node->uifiles, p);
- g_free (reference);
+ g_slice_free (NodeUIReference, reference);
break;
}
typedef struct {
GQuark path_quark;
- GtkWidget *widget;
GtkAccelGroup *accel_group;
GClosure *closure;
} AccelPath;
/* closures_destroy takes care of unrefing the closure */
g_object_unref (apath->accel_group);
- g_free (apath);
+ g_slice_free (AccelPath, apath);
}
g_return_if_fail (_gtk_accel_path_is_valid (accel_path));
gtk_accel_map_add_entry (accel_path, 0, 0);
- apath = g_new (AccelPath, 1);
- apath->widget = widget;
+ apath = g_slice_new (AccelPath);
apath->accel_group = g_object_ref (accel_group);
apath->path_quark = g_quark_from_string (accel_path);
- apath->closure = widget_new_accel_closure (apath->widget, GTK_WIDGET_GET_CLASS (apath->widget)->activate_signal);
+ apath->closure = widget_new_accel_closure (widget, GTK_WIDGET_GET_CLASS (widget)->activate_signal);
}
else
apath = NULL;
if (events)
{
if (!eventp)
- eventp = g_new (gint, 1);
+ eventp = g_slice_new (gint);
*eventp = events;
g_object_set_qdata (G_OBJECT (widget), quark_event_mask, eventp);
}
else if (eventp)
{
- g_free (eventp);
+ g_slice_free (gint, eventp);
g_object_set_qdata (G_OBJECT (widget), quark_event_mask, NULL);
}
{
if (!eventp)
{
- eventp = g_new (gint, 1);
+ eventp = g_slice_new (gint);
*eventp = 0;
}
}
else if (eventp)
{
- g_free (eventp);
+ g_slice_free (gint, eventp);
g_object_set_qdata (G_OBJECT (widget), quark_event_mask, NULL);
}
modep = g_object_get_qdata (G_OBJECT (widget), quark_extension_event_mode);
if (!modep)
- modep = g_new (GdkExtensionMode, 1);
+ modep = g_slice_new (GdkExtensionMode);
*modep = mode;
g_object_set_qdata (G_OBJECT (widget), quark_extension_event_mode, modep);
events = g_object_get_qdata (G_OBJECT (widget), quark_event_mask);
if (events)
- g_free (events);
+ g_slice_free (gint, events);
mode = g_object_get_qdata (G_OBJECT (widget), quark_extension_event_mode);
if (mode)
- g_free (mode);
+ g_slice_free (GdkExtensionMode, mode);
accessible = g_object_get_qdata (G_OBJECT (widget), quark_accessible_object);
if (accessible)
gtk_widget_shape_info_destroy (GtkWidgetShapeInfo *info)
{
g_object_unref (info->shape_mask);
- g_free (info);
+ g_slice_free (GtkWidgetShapeInfo, info);
}
/**
{
GTK_PRIVATE_SET_FLAG (widget, GTK_HAS_SHAPE_MASK);
- shape_info = g_new (GtkWidgetShapeInfo, 1);
+ shape_info = g_slice_new (GtkWidgetShapeInfo);
g_object_set_qdata_full (G_OBJECT (widget), quark_shape_info, shape_info,
(GDestroyNotify) gtk_widget_shape_info_destroy);
static gboolean disable_startup_notification = FALSE;
static gboolean sent_startup_notification = FALSE;
+static GQuark quark_gtk_embedded = 0;
+static GQuark quark_gtk_window_key_hash = 0;
+static GQuark quark_gtk_window_default_icon_pixmap = 0;
+static GQuark quark_gtk_window_icon_info = 0;
+
static void gtk_window_set_property (GObject *object,
guint prop_id,
const GValue *value,
parent_class = g_type_class_peek_parent (klass);
+ quark_gtk_embedded = g_quark_from_static_string ("gtk-embedded");
+ quark_gtk_window_key_hash = g_quark_from_static_string ("gtk-window-key-hash");
+ quark_gtk_window_default_icon_pixmap = g_quark_from_static_string ("gtk-window-default-icon-pixmap");
+ quark_gtk_window_icon_info = g_quark_from_static_string ("gtk-window-icon-info");
+
gobject_class->dispose = gtk_window_dispose;
gobject_class->finalize = gtk_window_finalize;
g_return_if_fail (GTK_IS_WINDOW (window));
- embedded_windows = g_object_get_data (G_OBJECT (window), "gtk-embedded");
+ embedded_windows = g_object_get_qdata (G_OBJECT (window), quark_gtk_embedded);
if (embedded_windows)
- g_object_steal_qdata (G_OBJECT (window),
- g_quark_from_static_string ("gtk-embedded"));
+ g_object_steal_qdata (G_OBJECT (window), quark_gtk_embedded);
embedded_windows = g_list_prepend (embedded_windows,
GUINT_TO_POINTER (xid));
- g_object_set_data_full (G_OBJECT (window), I_("gtk-embedded"),
- embedded_windows,
- embedded_windows ?
- (GDestroyNotify) g_list_free : NULL);
+ g_object_set_qdata_full (G_OBJECT (window), quark_gtk_embedded,
+ embedded_windows,
+ embedded_windows ?
+ (GDestroyNotify) g_list_free : NULL);
}
void
g_return_if_fail (GTK_IS_WINDOW (window));
- embedded_windows = g_object_get_data (G_OBJECT (window), "gtk-embedded");
+ embedded_windows = g_object_get_qdata (G_OBJECT (window), quark_gtk_embedded);
if (embedded_windows)
- g_object_steal_qdata (G_OBJECT (window),
- g_quark_from_static_string ("gtk-embedded"));
+ g_object_steal_qdata (G_OBJECT (window), quark_gtk_embedded);
node = g_list_find (embedded_windows, GUINT_TO_POINTER (xid));
if (node)
g_list_free_1 (node);
}
- g_object_set_data_full (G_OBJECT (window), I_("gtk-embedded"),
- embedded_windows,
- embedded_windows ?
- (GDestroyNotify) g_list_free : NULL);
+ g_object_set_qdata_full (G_OBJECT (window), quark_gtk_embedded,
+ embedded_windows,
+ embedded_windows ?
+ (GDestroyNotify) g_list_free : NULL);
}
void
static GtkWindowIconInfo*
get_icon_info (GtkWindow *window)
{
- return g_object_get_data (G_OBJECT (window),
- "gtk-window-icon-info");
+ return g_object_get_qdata (G_OBJECT (window), quark_gtk_window_icon_info);
}
static void
free_icon_info (GtkWindowIconInfo *info)
{
g_free (info->icon_name);
- g_free (info);
+ g_slice_free (GtkWindowIconInfo, info);
}
if (info == NULL)
{
- info = g_new0 (GtkWindowIconInfo, 1);
- g_object_set_data_full (G_OBJECT (window),
- I_("gtk-window-icon-info"),
+ info = g_slice_new0 (GtkWindowIconInfo);
+ g_object_set_qdata_full (G_OBJECT (window),
+ quark_gtk_window_icon_info,
info,
(GDestroyNotify)free_icon_info);
}
static ScreenIconInfo *
get_screen_icon_info (GdkScreen *screen)
{
- ScreenIconInfo *info = g_object_get_data (G_OBJECT (screen),
- "gtk-window-default-icon-pixmap");
+ ScreenIconInfo *info = g_object_get_qdata (G_OBJECT (screen),
+ quark_gtk_window_default_icon_pixmap);
if (!info)
{
- info = g_new0 (ScreenIconInfo, 1);
- g_object_set_data (G_OBJECT (screen), I_("gtk-window-default-icon-pixmap"), info);
+ info = g_slice_new0 (ScreenIconInfo);
+ g_object_set_qdata (G_OBJECT (screen),
+ quark_gtk_window_default_icon_pixmap, info);
}
if (info->serial != default_icon_serial)
{
GList *embedded_windows;
- embedded_windows = g_object_get_data (G_OBJECT (widget), "gtk-embedded");
+ embedded_windows = g_object_get_qdata (G_OBJECT (widget), quark_gtk_embedded);
if (embedded_windows)
{
GdkEvent *send_event = gdk_event_new (GDK_CLIENT_EVENT);
{
guint keyval;
guint modifiers;
- gboolean is_mnemonic;
+ guint is_mnemonic : 1;
};
+static void
+window_key_entry_destroy (gpointer data)
+{
+ g_slice_free (GtkWindowKeyEntry, data);
+}
+
static void
add_to_key_hash (GtkWindow *window,
guint keyval,
{
GtkKeyHash *key_hash = data;
- GtkWindowKeyEntry *entry = g_new (GtkWindowKeyEntry, 1);
+ GtkWindowKeyEntry *entry = g_slice_new (GtkWindowKeyEntry);
entry->keyval = keyval;
entry->modifiers = modifiers;
gtk_window_get_key_hash (GtkWindow *window)
{
GdkScreen *screen = gtk_window_check_screen (window);
- GtkKeyHash *key_hash = g_object_get_data (G_OBJECT (window), "gtk-window-key-hash");
+ GtkKeyHash *key_hash = g_object_get_qdata (G_OBJECT (window), quark_gtk_window_key_hash);
if (key_hash)
return key_hash;
key_hash = _gtk_key_hash_new (gdk_keymap_get_for_display (gdk_screen_get_display (screen)),
- (GDestroyNotify)g_free);
+ (GDestroyNotify)window_key_entry_destroy);
_gtk_window_keys_foreach (window, add_to_key_hash, key_hash);
- g_object_set_data (G_OBJECT (window), I_("gtk-window-key-hash"), key_hash);
+ g_object_set_qdata (G_OBJECT (window), quark_gtk_window_key_hash, key_hash);
return key_hash;
}
static void
gtk_window_free_key_hash (GtkWindow *window)
{
- GtkKeyHash *key_hash = g_object_get_data (G_OBJECT (window), "gtk-window-key-hash");
+ GtkKeyHash *key_hash = g_object_get_qdata (G_OBJECT (window), quark_gtk_window_key_hash);
if (key_hash)
{
_gtk_key_hash_free (key_hash);
- g_object_set_data (G_OBJECT (window), "gtk-window-key-hash", NULL);
+ g_object_set_qdata (G_OBJECT (window), quark_gtk_window_key_hash, NULL);
}
}
gtk_window_activate_key (GtkWindow *window,
GdkEventKey *event)
{
- GtkKeyHash *key_hash = g_object_get_data (G_OBJECT (window), "gtk-window-key-hash");
+ GtkKeyHash *key_hash = g_object_get_qdata (G_OBJECT (window), quark_gtk_window_key_hash);
GtkWindowKeyEntry *found_entry = NULL;
if (!key_hash)
{
gtk_window_keys_changed (window);
- key_hash = g_object_get_data (G_OBJECT (window), "gtk-window-key-hash");
+ key_hash = g_object_get_qdata (G_OBJECT (window), quark_gtk_window_key_hash);
}
if (key_hash)
void
_gtk_xembed_push_message (XEvent *xevent)
{
- GtkXEmbedMessage *message = g_new (GtkXEmbedMessage, 1);
+ GtkXEmbedMessage *message = g_slice_new (GtkXEmbedMessage);
message->time = xevent->xclient.data.l[0];
message->message = xevent->xclient.data.l[1];
{
GtkXEmbedMessage *message = current_messages->data;
current_messages = g_slist_delete_link (current_messages, current_messages);
-
- g_free (message);
+ g_slice_free (GtkXEmbedMessage, message);
}
/**